perm filename MARK.SAI[X,ALS]1 blob
sn#083847 filedate 1974-01-25 generic text, type T, neo UTF8
00010 BEGIN "MARKX"
00020 DEFINE ⊂="COMMENT"; ⊂ NOV.26,1973;
00030 ⊂ This program is a very simple pitch marking routine to be used to
00040 suppliment Neil's routine in certain cases;
00050 DEFINE ⊃="⊂";
00060 DEFINE CR="'15",LF="'12",CRLF="CR&LF",TB="'11";
00070 REQUIRE "DPYSUB.HDR[1,PDQ]" SOURCE_FILE;
00080 LABEL STARTP,STOPP,TOFORM;
00090 DEFINE \=" "; ⊂ DEFINE \="SAFE"; ⊂ Alternarte definitions;
00100 INTEGER SUM,SUMM,SUMP,MAX,MIN,
00110 SUMREF,SUMSAV,SUMMIN,SUMMAX,SUMOLD;
00120 INTEGER MAXOLD,MINOLD,MARGIN,PER,PERMIN,PERMAX;
00130 INTEGER QOLD,QSAVE,QREF,QOLD2;
00140 INTEGER ZEROC,ZEROF,DX;
00160 \ INTERNAL INTEGER ARRAY D[0:767];
00200 \ INTEGER ARRAY DPYBUF[0:1535];
00210 \ INTERNAL INTEGER ARRAY FVAL,NVAL[0:8];
00230 INTEGER FX;
00240 INTEGER I,J,K,L,P,PP,Q,QQ,QNEG,QPOS,R,DK,DDK,DDDK,DVAL,DDVAL,DDDVAL,ALPHA,
00250 POINTF,POINTX,STATE,DELTA,DELTN,VAL,CHAN1,EOF,POINTT,POINTV;
00260 INTERNAL INTEGER M,N,PERIOD;
00270 INTEGER PT0,PT1,PT2,X0,X1,Y0,Y1,X2,Y2,
00280 PTCNT,PICK,JP,JPP,JPX,OPT,OPT1,SHUFCT;
00290 INTEGER II,JJ,KK,NN,SEGC,BRK,EOFA,EOFT,EOFTF,READ3,LFX,PITX,PITY,
00300 SEGTOT,SEGIN,KKT,NNT,ITT,JTT,KTT;
00310 BOOLEAN ER;
00320 INTEGER CHAN3;
00330 INTERNAL INTEGER CHAN5;
00340 \ INTEGER ARRAY BUF,BUFTT[0:511];
00345 \ INTEGER ARRAY BUFT[0:1023];
00350 STRING FILEN,FILEF,READ,READ1,READT,
00360 READTT,FILEO,READ2,FILEQ,TFILE,FILLST,FILEP;
00370
00380 INTEGER ARRAY QRES,SUMRES,SPAN[0:7];
00390 INTEGER QX,XXP,XXM,GOOD,XING;
00400
00410
00420 PROCEDURE OUTALL(STRING S);
00430 BEGIN
00440 STRING SS; INTEGER J;
00450 SETBREAK(18,0,NULL,"OSN");
00460 SS←SCAN(S,18,J);
00470 OUTSTR(SS);
00480 END;
00490
00500 PROCEDURE DATAIN;
00510 BEGIN
00520 INTEGER J;
00530 FOR J←0 STEP 1 UNTIL 511 DO BUF[J]←0;
00540 ⊂ IF EOF=0 THEN OUTSTR("BUF") ELSE OUTSTR(" EOF ");
00550 IF EOF=0 THEN ARRYIN(CHAN1,BUF[0],512) ELSE OUTSTR("Out of data"&crlf);
00560 ⊂ IF EOF=0 THEN OUTSTR(" New BUF ") ELSE OUTSTR(" EOF ");
00570 POINTX←POINT(12,BUF[0],-1);
00580 SEGC←II←II+12; JJ←II+11;
00590 END;
00600
00610
00620 PROCEDURE DTTTIN;
00630 BEGIN
00640 INTEGER J;
00650 IF EOFT=0 THEN ARRYIN(CHAN3,BUFTT[0],512)
00660 ELSE OUTSTR
00670 ("No more .P data with JJ= "&CVS(JJ)&"SEGC= "&CVS(SEGC)&CRLF);
00680 FOR J←0 STEP 1 UNTIL 511 DO IF BUFTT[J]=0 THEN BUFTT[J]←'377777777777;
00690 ITT←BUFTT[0] LSH -15; KTT←0; JTT←BUFTT[511] LSH -15;
00700 ⊂ FOR J←0 STEP 1 UNTIL 10 DO OUTSTR(CVOS(BUFTT[J])&TB);
00710 END;
00720
00730
00740 PROCEDURE DATOUT;
00750 BEGIN "DATOUT"
00760 INTEGER I,J;
00770
00780 ARRYOUT(CHAN5,BUFT[0],1024);
00790 FOR I←0 STEP 1 UNTIL 1023 DO BUFT[I]←0;
00800 END "DATOUT";
00810
00820
00830 PROCEDURE MARK;
00840 BEGIN "MARK"
00850 INTEGER I,JJ,K,L,JJP,LP,PT2;
00860
00870 RIVECT(0,-230); SETFORMAT(3,0);
00880 FOR I←0 STEP 20 UNTIL 340 DO BEGIN
00890 DPYSST(CVS(I)); RIVECT(15,0); END;
00900 RIVECT(-555,30); RIVECT(-500,0);
00910
00920 FOR I←0 STEP 100 UNTIL 300 DO BEGIN "HUNDRED"
00930 RIVECT(0,30); RVECT(0,-30);
00940 FOR JJ←0 STEP 50 UNTIL 50 DO BEGIN "FIFTY"
00950 FOR K←1 STEP 1 UNTIL 5 DO BEGIN "TEN"
00960 RIVECT(15,0); RVECT(0,5); RIVECT(0,-5);
00970 RIVECT(15,0); RVECT(0,10);RIVECT(0,-10);
00980 END "TEN";
00990 RVECT(0,20); RIVECT(0,-20);
01000 IF I≥300 THEN DONE "HUNDRED";
01010 END "FIFTY";
01020 END "HUNDRED";
01030 RIVECT(-550,200); RIVECT(-500,0);
01040
01050 K←D[0]%8; RIVECT(0,K);
01060 FOR I←1 STEP 1 UNTIL 350 DO BEGIN
01070 JJP←D[I]%6;
01080 LP←JJP-K; RVECT(3,LP); K←JJP; END;
01090 RIVECT(-550,-K); RIVECT(-500,0);
01100
01110 RIVECT(500,0);
01120 FOR JJ←1 STEP 1 UNTIL 3 DO IF FVAL[JJ]≤350 THEN BEGIN
01130 L←3*FVAL[JJ]-500;
01140 RIVECT(L,200); RVECT(0,-200);
01150 RIVECT(-25,0); RVECT(50,0);
01160 RIVECT(-25,0); RIVECT(-L,0); END;
01170
01180 FOR JJ←1 STEP 1 UNTIL 3 DO IF NVAL[JJ]≤350 THEN BEGIN
01190 L←3*NVAL[JJ]-500;
01200 RIVECT(L,0);RIVECT(-25,0); RVECT(50,0);
01210 RIVECT(-25,0); RVECT(0,-200); RIVECT(-L,200); END;
01220
01230 RIVECT(-500,0);
01240 DPYOUT(0); PTOCHW(0,'10120); SETFORMAT(1,0);
01250
01260
01270 END "MARK";
01280
01290 INTERNAL PROCEDURE CALCOMP(STRING FILE;INTEGER ARRAY BUFR);
01300 ⊂ Outputs display buffer BUFR to disk file FILE in a format
01310 readable by the Nealy Calcomp plotter program PLTVEC, and by
01320 the Quam Video Synthesizer program MIRTOP;
01330 IF FILE THEN
01340 BEGIN INTEGER DSIZ,CCCHN;
01350 OPEN(CCCHN←GETCHAN,"DSK",'14,0,1,0,0,0);
01360 ENTER(CCCHN,FILEN&".GRF",0);
01370 DPYPARS;DSIZ←BUFR[1]+4;
01380 ARRYOUT(CCCHN,BUFR[0],2);WORDOUT(CCCHN,0);
01390 ARRYOUT(CCCHN,BUFR[2],DSIZ-2);
01400 RELEASE(CCCHN);
01410 END "CALCOMP";
01420
01430
01440 PROCEDURE PEEK;
01450 BEGIN
01460
01470 OUTSTR(CRLF&"Q'S "&CVS(QREF)&" "&CVS(QSAVE)&" "&CVS(QOLD)&TB&" P="&CVS(P)&
01480 TB&"SUM'S "&CVS(SUMREF)&" "&CVS(SUMSAV)&" "&CVS(SUMOLD)&
01490 TB&"PERIOD="&CVS(PERIOD)&" "&CVS(PER)&CRLF);
01500 END;
01510
01520 PROCEDURE SPOR;
01530 BEGIN
01540 OUTSTR(CVS(STATE)&" ");
01550 END;
01560
01570 PROCEDURE PITCH;
01580 BEGIN "PITCH"
01590
01600 CASE STATE OF BEGIN
01610
01620 ⊂ State 0 from 2 on - ;
01630 IF VAL>0 THEN BEGIN
01640 STATE←2; QOLD←QQ; SUMP←MAX←VAL; XING←XING+1;
01650 ⊃ SPOR;
01660 END;
01670
01680 ⊂ STATE 1 from 5 on + ;
01690 IF VAL<0 THEN BEGIN
01700 IF XXP<2 THEN BEGIN
01710 STATE←5; SUM←SUM+SUMP-VAL;
01720 ⊃ SPOR;
01730 IF MAXOLD>MAX THEN MAX←MAXOLD;
01740 END;
01750 END ELSE BEGIN
01760 SUMP←SUMP+VAL;
01780 IF VAL>MAX THEN MAX←VAL;
01790 IF SUMP>DELTA THEN BEGIN
01800 STATE←2; SUM←0;
01810 ⊃ SPOR;
01820 ⊂ PEEK;
01830 ⊂ Decision;
01840 P←0;
01845 IF XING≥15 THEN P←0 ELSE
01850 IF (SUMSAV=SUMREF)∧(GOOD<2)∧(SUMOLD>SUMSAV)
01855 THEN P←1 ELSE
01860 IF (SUMREF=SUMSAV)∧(PER>PERIOD*3%4)∧(QOLD-QSAVE>PERIOD*3%4)
01870 THEN P←2 ELSE
01890 IF (SUMOLD<SUMSAV) THEN SUMSAV←SUMOLD ELSE
01900 IF (SUMOLD>SUMSAV*4%3)∧(PER>PERIOD*7%8)∧(SUMOLD>SUMREF%2)
01910 THEN P←3 ELSE
01930 IF (SUMOLD>SUMSAV*9%8)∧(PER>PERIOD*9%10)∧(SUMOLD>SUMMIN)
01940 THEN P←4 ELSE
01945 IF (SUMREF≤SUMMIN)∧(SUMOLD>SUMREF)
01947 THEN P←5 ELSE
01950 IF (SUMOLD>SUMREF*5%4)∧(PER>PERIOD*5%8)
01980 THEN P←6; ⊂ To get in step;
02010 IF (PER>PERIOD*3%2)∧(P=0)∧(XING≤15) THEN BEGIN
02020 K←0;
02030 FOR I←0 STEP 1 UNTIL 7 DO
02040 IF SUMRES[I]>K THEN BEGIN K←SUMRES[I]; QX←I; END;
02050 IF K>2000 THEN BEGIN
02060 QSAVE←QRES[QX]; SUMOLD←SUMRES[QX]; P←7;
02070 END;
02080 END;
02081 ⊃ OUTSTR(CRLF&"Q"&CVS(QSAVE)&" S"&CVS(SUMOLD)&" A"&CVS(MAXOLD-MINOLD)&" ");
02082 ⊃ IF P≠0 THEN OUTSTR("P"&CVS(P)&TB);
02085
02087 IF ((QRES[QX]-QREF)>(PERIOD%2))∧(P=0)∧(QX<7) THEN BEGIN
02088 ⊃ OUTSTR(CRLF&"QX="&CVS(QX)&TB&CVS(QRES[QX])&TB&CVS(SUMRES[QX])&TB&CVS(SPAN[QX]));
02089 QX←QX+1; END;
02090 IF P>0 THEN BEGIN
02095 GOOD←GOOD+1; XING←0;
02100 ⊂ Record mark;
02110 WHILE (BUFT[PITX-1] LSH -15)≥QSAVE DO BEGIN
02120 PITX←PITX-1; ⊂ QREF←QREF-PERIOD; END;
02130 BUFT[PITX]←(QSAVE LSH 15)+(SUMOLD LAND '77770)+(P LAND '7);
02140 ⊂ PEEK;
02150 SUMREF←SUMOLD; ⊂ PER←QSAVE-QREF; QREF←QSAVE;
02160 PITX←PITX+1;
02170 IF (PER>PERMIN)∧(PER<PERMAX) THEN PERIOD←(2*PERIOD+PER)%3;
02200 FOR I←0 STEP 1 UNTIL 7 DO SUMRES[I]←SPAN[I]←0;
02205 QX←0;
02210 JPP←0;
02230 END;
02240 END;
02250 END;
02260
02270 ⊂ STATE 2 from 0 on + from 1 on alpha with decision;
02275 IF VAL<ALPHA THEN BEGIN
02277 QOLD←QQ-1;
02280 IF VAL<0 THEN BEGIN STATE←0; ⊃ SPOR; END;
02285 END ELSE BEGIN
02290 SUMP←SUMP+VAL; IF VAL>MAX THEN MAX←VAL;
02310 IF SUMP>DELTA THEN BEGIN
02320 XXM←0;
02330 STATE←3; QRES[QX]←QSAVE←QOLD; SUMSAV←SUMOLD;
02340 ⊃ SPOR;
02350 END;
02370 END;
02380
02390 ⊂ STATE 3 from 4 on + from 2 on delta;
02400 IF VAL<0 THEN BEGIN
02410 XXM←XXM+1;
02420 STATE←4; SUMM←MIN←VAL; QNEG←QQ;
02430 ⊃ SPOR;
02440 END ELSE BEGIN
02450 SUMP←SUMP+VAL; IF VAL>MAX THEN MAX←VAL;
02460 END;
02470
02480 ⊂ STATE 4 from 3 on - ;
02490 IF VAL>0 THEN BEGIN
02500 IF XXM<3 THEN BEGIN
02510 STATE←3; SUMP←SUMP+VAL-SUMM;
02520 ⊃ SPOR;
02530 END;
02540 END ELSE BEGIN
02550 SUMM←SUMM+VAL; IF VAL<MIN THEN MIN←VAL;
02560 ⊂ IF SUMM<DELTN THEN BEGIN ;
02562 IF (XXM≥3)∨((SUMM<DELTN)∧((QQ-QNEG)>3)) THEN BEGIN
02570 STATE←5; SUMRES[QX]←SUM←SUMP-SUMM; SUMP←SUMM←0;
02575 XXP←0;
02580 ⊃ SPOR;
02590 END;
02600 END;
02610
02620 ⊂ STATE 5 from 2 on - from 4 on DELTN;
02630 IF VAL>0 THEN BEGIN
02640 STATE←1;
02645 XXP←XXP+1; XING←XING+1;
02650 ⊃ SPOR;
02660 ⊂ Prepare for decision;
02670 MAXOLD←MAX; MINOLD←MIN; SUMRES[QX]←SUMOLD←SUM;
02675 SPAN[QX]←MAX-MIN;
02680 SUMP←MAX←VAL; ⊂ QSAVE←QOLD; QOLD←QQ;
02685 PER←QSAVE-QREF;
02690 END ELSE BEGIN
02700 SUM←SUM-VAL; IF VAL<MIN THEN MIN←VAL;
02710 END;
02720 END;
02730
02750
02760
02770 IF ((QQ-QREF)>(PERIOD*7%4))∧(P=0) THEN BEGIN
02780 K←0;
02790 FOR I←0 STEP 1 UNTIL 7 DO
02800 IF (SUMRES[I]>K)∧(QRES[I]>(QREF+PERIOD*3%4)) THEN BEGIN K←SUMRES[I];QX←I; END;
02810 IF (K>2000)∧(XING<15) THEN BEGIN
02820 QREF←QSAVE←QRES[QX]; SUMREF←SUMOLD←SUMRES[QX]; P←7;
02830 BUFT[PITX]←(QSAVE LSH 15)+(SUMOLD LAND '77770)+P;
02835 ⊃ OUTSTR(CRLF&"Q"&CVS(QSAVE)&" S"&CVS(SUMOLD)&" A"&CVS(SPAN[QX])&" ");
02836 ⊃ OUTSTR("*P"&CVS(P)&TB);
02850 FOR I←0 STEP 1 UNTIL 7 DO BEGIN "SLIDE"
02855 K←I+QX+1;
02860 IF K≤7 THEN BEGIN
02870 QRES[I]←QRES[K]; SUMRES[I]←SUMRES[K]; SPAN[I]←SPAN[K];
02875 END ELSE SUMRES[I]←SPAN[I]←0;
02880 IF SUMRES[I]=0 THEN DONE "SLIDE";
02890 END;
02895 QX←I;
02900 END ELSE BEGIN
02910 QREF←QREF+PERIOD; GOOD←0;
02920 BUFT[PITX]←QREF LSH 15; PER←PERIOD;
02930 ⊃ OUTSTR(CRLF&"Q"&CVS(QREF)&" ***"&TB);
02940 END;
02950 PITX←PITX+1;
02955 XING←0;
02960 ⊂ PEEK;
02970 ⊃ SPOR;
02980 END;
02990
03000 QQ←QQ+1; P←0;
03010
03020 END "PITCH";
03030
00010 FILEN←"HI20.001[CMP,VIN]";
00020 FILEO←"SEG1.ALS[SYN,ALS]";
00030 PERIOD←180; PERMAX←260; PERMIN←100; MARGIN←50; DELTA←200; DELTN←-200; QQ←0;
00040 SUMMIN←200; ALPHA←100;
00050
00060 STDBRK(1);
00070 SETBREAK(14,"∃",NULL,"INS");
00080 SETBREAK(15,'11&'12&'14&'15&'40,NULL,"INS");
00090 SETBREAK(16,'56,NULL,"INA");
00100 SETBREAK(17,'12,'15,"INS");
00110
00120 CHAN1←1;CHAN3←3; CHAN5←5;
00130 OUTSTR("This program generates a file of pitch markers similar to "&
00140 "the .P files"&CRLF&" but with extension of .ALS."&CRLF);
00150 OUTSTR("At present this program takes acoustic data from [CMP,VIN],"&
00160 CRLF&TB&"and pulse informstion from .P[PIT,NJM] files"&CRLF&TB&CRLF&LF);
00170
00180
00190 STARTP:
00200
00210 OUTSTR(CRLF&"Type number of file to start (CR only for 1) ");
00220 IF (READ←INCHWL)="" THEN PP←1 ELSE PP←CVD(READ);
00230 OUTSTR("Start display with sample # (CR for first phone) ");
00240 IF (READ←INCHWL)="" THEN BEGIN NVAL[0]←0; JPP←1; END ELSE BEGIN
00245 JPP←0; NVAL[0]←CVD(READ); END;
00250
00260 ⊂ Begin FILEREAD;
00270 FOR PP←PP STEP 1 UNTIL 26 DO BEGIN "FILEREAD"
00280 CLOSE(CHAN1); OPEN(CHAN1,"DSK",'10,2,0,0,0,EOF);
00290 SETFORMAT(-3,0); FILEQ←CVS(PP);
00300 FILEN←FILEN[1 TO 5]&FILEQ&"[CMP,VIN]";
00310 LOOKUP(CHAN1,FILEN,ER); TFILE←FILEN;
00320 WHILE ER DO BEGIN
00330 IF PP>1 THEN BEGIN OUTSTR("Out of data, will terminate."&CRLF);
00340 GOTO STOPP; END;
00350 OUTSTR(CRLF&"Can not find file "&TFILE&" File= ");
00360 LOOKUP(CHAN1,TFILE←INCHWL,ER); END;
00370 J←K←L←STATE←VAL←0; R←-1;
00380 SETFORMAT(1,0); FILEQ←CVS(PP); JP←10000; R←-1; CLRBUF;
00390 II←-11; JJ←-1;
00400
00410 DATAIN; SUMREF←SUMOLD←SUMSAV←SUMMIN;
00420 PITX←0; BUFT[PITX]←1; PITX←1;
00430 FOR J←0 STEP 1 UNTIL 767 DO BEGIN
00440 VAL←ILDB(POINTX); IF VAL>2047 THEN VAL←VAL-4096;
00450 D[J]←VAL; PITCH; END;
00460 SEGIN←6; FVAL[1]←FVAL[2]←0;
00470
00480
00490 FILEP←FILEO[1 TO 3]&FILEQ&".ALS[SYN,ALS]";
00500 CLOSE(CHAN5); OPEN(CHAN5,"DSK",'14,0,2,0,0,0);
00510 ENTER(CHAN5,FILEP,0);
00520 OUTSTR("File "&FILEP&" has been opened"&CRLF);
00530
00540
00550 READ2←FILEP;
00560 READTT←SCAN(READ2,16,J)&"P[PIT,NJM]";
00570 ⊂ OUTSTR(READTT&CRLF);
00580 CLOSE(CHAN3); OPEN(CHAN3,"DSK",'10,10,0,0,0,EOFT);
00590 LOOKUP(CHAN3,READTT,ER); TFILE←READTT;
00600 IF ER THEN BEGIN
00610 OUTSTR("File "&READTT&" not found (S to start, space bar to ignore) ");
00620 IF (READ1←INCHRW)="S" THEN GOTO STARTP ELSE BEGIN
00630 BUFTT[0]←'77777; BUFTT[1]←'377777700000;ITT←0; JTT←'3777777;
00640 CLRBUF; END; END;
00650
00660 FOR I←1 STEP 1 UNTIL 8 DO FVAL[I]←0;
00670 DTTTIN;
00680 FVAL[4]←BUFTT[0]; FVAL[1]←(FVAL[4] LSH -15)-(SEGIN-6)*128;
00690 FVAL[5]←BUFTT[1]; FVAL[2]←(FVAL[5] LSH -15)-(SEGIN-6)*128;
00700 FVAL[6]←BUFTT[2]; FVAL[3]←(FVAL[6] LSH -15)-(SEGIN-6)*128;KTT←2;
00710 NVAL[5]←BUFT[0]; NVAL[2]←(NVAL[5] LSH -15)-(SEGIN-6)*128;
00720 NVAL[6]←BUFT[1]; NVAL[3]←(NVAL[6] LSH -15)-(SEGIN-6)*128; PITY←1;
00730
00740
00750
00760
00770 ⊂ Begin "GET";
00780
00790 WHILE TRUE DO BEGIN "GET"
00800
00810
00820 ⊂ OUTSTR("JTT="&CVS(JTT)&TB&"J="&CVS(J)&CRLF);
00830 IF JJ<SEGIN THEN IF EOF≠0 THEN DONE "GET" ELSE DATAIN;
00840
00850 ⊂ OUTSTR("JJ="&CVS(JTT)&TB&"J="&CVS(J)&"before DTTTIN");
00860 IF JTT<(SEGIN-1)*128 THEN DTTTIN;
00870 ⊂ OUTSTR(" and after JTT="&CVS(JTT)&CRLF);
00880
00890 ⊂ FVAL and NVAL assignments (NVAL are newly computed values)
00900 [1] DELTA FOR FIRST MARKER
00910 [2] DELTA FOR SECOND MARKER
00920 [3] DELTA FOR THIRD MARKER
00930 [4] PULSE DATE FOR FIRST MARKER
00940 [5] PULSE DATA FOR SECOND MARKER
00950 [6] PULSE DATA FOR THIRD MARKER;
00960
00970
00980 NVAL[1]←NVAL[2]; NVAL[4]←NVAL[5];
00990
01000 WHILE NVAL[1]>127 DO BEGIN
01010 IF SEGIN≥JJ THEN IF EOF≠0 THEN DONE "GET" ELSE DATAIN;
01020 FOR Q←0 STEP 1 UNTIL 639 DO D[Q]←D[Q+128];
01030 FOR Q←640 STEP 1 UNTIL 767 DO BEGIN
01040 VAL←ILDB(POINTX); IF VAL>2047 THEN VAL←VAL-4096;
01050 D[Q]←VAL; PITCH; END; SEGIN←SEGIN+1; ⊂ OUTSTR("RELOAD"&CRLF);
01060 FVAL[1]←FVAL[1]-128; FVAL[2]←FVAL[2]-128; FVAL[3]←FVAL[3]-128;
01070 NVAL[1]←NVAL[1]-128; NVAL[3]←NVAL[3]-128; END;
01080
01090 WHILE FVAL[1]<0 DO BEGIN FVAL[1]←FVAL[2]; FVAL[2]←FVAL[3];
01100 FVAL[4]←FVAL[5]; FVAL[5]←FVAL[6];
01110 KTT←KTT+1; IF KTT≥512 THEN DTTTIN;
01120 FVAL[6]←BUFTT[KTT];
01130 FVAL[3]←(FVAL[6] LSH -15)-(SEGIN-6)*128;END;
01140
01145 IF PITY>(PITX-1) THEN BEGIN OUTSTR("TROUBLE"&CRLF); INCHWL; END;
01150 NVAL[2]←NVAL[3]; NVAL[5]←NVAL[6];
01160 PITY←PITY+1;
01170 NVAL[6]←BUFT[PITY];
01175 IF NVAL[6]=0 THEN BEGIN OUTSTR("BUFT[PITY] was zero"&crlf); inchwl; end;
01180 NVAL[3]←(NVAL[6] LSH -15)-(SEGIN-6)*128;
01190
01200 ⊂ OUTSTR(CVS(FVAL[1])&TB&CVS(FVAL[2])&TB&CVS(FVAL[3])&
01210 TB&CVS(FVAL[4] LSH -15)&TB&
01220 CVS(FVAL[5] LSH -15)&TB&CVS(FVAL[6] LSH -15)&CRLF);
01230 ⊂ OUTSTR(CVS(NVAL[1])&TB&CVS(NVAL[2])&TB&CVS(NVAL[3])&
01240 TB&CVS(NVAL[4] LSH -15)&TB&
01250 CVS(NVAL[5] LSH -15)&TB&CVS(NVAL[6] LSH -15)&CRLF);
01260
01270 ⊂ OUTSTR(CRLF&CVS(SEGIN)&TB&CVS(FVAL[1])&TB&CVS(FVAL[2])&TB&CVS(FVAL[3])&TB&
01280 CVS(FVAL[4] LSH -15)&
01290 " "&CVS(FVAL[5] LSH -15)&" "&CVS(FVAL[6] LSH -15)&TB&TB);
01300
01310
01320 R←R+1; OUTSTR(CVS(NVAL[4] LAND '7)&":"&CVS(NVAL[4] LSH -15)&TB);
01325 IF (R MOD 10)=9 THEN OUTSTR(CRLF);
01330
01340
00010 JP←JP-1; READ1←INCHRS;
00020 IF (READ1="F")∨(READ1="f") THEN BEGIN CLRBUF; READ1←"";
00030 JP←-10; OUTSTR(CRLF&LF&"Will stop at the end of this file"&CRLF&LF); END;
00040 IF (READ1="E")∨(READ1="e") then goto stopp;
00050
00060 IF (READ1=" ")∨((JPP=0)∧((NVAL[5] LSH -15)>NVAL[0])) THEN BEGIN "SHOW"
00070 ⊂ IF (READ1=" ")∨((ABS(FVAL[1]-NVAL[1])>5)∨(ABS(FVAL[2]-NVAL[2])>5)) THEN
00080 BEGIN "SHOW";
00090 TYPLOC(512,120); DPYSET(DPYBUF);
00100 JP←1;
00110 OUTSTR(CRLF&"File "&FILEN&TB);
00120 OUTSTR("from "&CVS(NVAL[4] LSH -15)
00130 &" to "&CVS(NVAL[5] LSH -15)&TB&CVOS(NVAL[4] LAND '77777)&","&
00140 CVOS(NVAL[5] LAND '77777)&TB&CVS(SUMREF)&CRLF);
00150 AIVECT(-599,-200);MARK;
00160 DPYOUT(0);PTOCHW(0,'10120);
00170 ⊂ OUTSTR("Type P for XGP copy file or type next command.");
00180 ⊂ OUTSTR("Space to run, LF for next, # for sample #, +# to add periods."&CRLF);
00190
00200 READ1←INCHRW;
00210 WHILE (READ1="W")∨(READ1="w") DO BEGIN DPYOUT(0) ;
00220 PTOCHW(0,'10120);READ1←INCHRW; END;
00230 IF (READ1="P")∨(READ1="p") THEN BEGIN CALCOMP("PLOTX",DPYBUF);
00240 OUTSTR("EX DPYXGP[X,ALS] plots PLOTX.GRF on the XGP. Next command please."&CRLF);
00250 READ1←INCHRW; END;
00260 K←CVASC(READ1); OPT1←0;
00270
00280 IF K=CVASC("+") THEN BEGIN
00290 JP←CVD(INCHWL); NVAL[0]←10000; END;
00300 IF K≥CVASC("0") THEN IF K≤CVASC("9") THEN BEGIN
00310 NVAL[0]←CVD(READ1&INCHWL); JP←10000; END;
00330 IF(READ1="F")∨(READ1="f") THEN JP←-1;
00340 IF (READ1="E")∨(READ1="e") THEN GOTO STOPP;
00350
00360 IF (READ1='15)∨(READ1='12) THEN BEGIN JP←1; NVAL[0]←0; CLRBUF; END;
00370
00380 TOFORM:
00390 IF (READ1="S")∨(READ1="s") THEN JP←JP+1;
00400 IF (READ1="E")∨(READ1="e") THEN GOTO STOPP;
00410 PTOCHW(0,'10103); CLRBUF; TYPLOC(512,-170); PTOCHW(0,'10120);
00420 END "SHOW";
00430
00440
00450 END "GET";
00460 CLOSE(CHAN1); CLOSE(CHAN3);
00470 DATOUT; CLOSE(CHAN5);
00480 IF JP<0 THEN DONE;
00490 END "FILEREAD";
00500
00510 OUTSTR("Data are exhausted"&CRLF&LF);
00520 STOPP: PTOCHW(0,'10103); PTOCHW(0,'10120);
00530 CLOSE(CHAN1);CLOSE(CHAN3);
00540 CLOSE(CHAN5);
00550
00560 END "MARKX";
00570